home *** CD-ROM | disk | FTP | other *** search
/ Inter.Net 55-1 / Inter.Net 55-1.iso / CBuilder / Setup / BCB / data.z / mapiform.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-09  |  27.6 KB  |  638 lines

  1. /*
  2.  *  M A P I F O R M . H
  3.  *
  4.  *  Declarations of interfaces for clients and providers of MAPI
  5.  *  forms and form registries.
  6.  *
  7.  *  Copyright 1986-1996 Microsoft Corporation. All Rights Reserved.
  8.  */
  9.  
  10. #ifndef MAPIFORM_H
  11. #define MAPIFORM_H
  12. #pragma option push -b
  13.  
  14. /* Include common MAPI header files if they haven't been already. */
  15.  
  16. #ifndef MAPIDEFS_H
  17.  
  18. #include <mapidefs.h>
  19. #include <mapicode.h>
  20. #include <mapiguid.h>
  21. #include <mapitags.h>
  22.  
  23. #endif
  24.  
  25. #if defined (__BORLANDC__)
  26. #  include <pshpack8.h>
  27. #endif
  28.  
  29. #ifndef BEGIN_INTERFACE
  30. #define BEGIN_INTERFACE
  31. #endif
  32.  
  33. #ifndef _MAC
  34. typedef const RECT FAR *LPCRECT;
  35. #endif
  36.  
  37. /* HFRMREG is an enumeration which represents a registry container.
  38.  * Microsoft reserves the values from 0 to 0x3FFF for its own use.
  39.  */
  40.  
  41. typedef ULONG HFRMREG;
  42.  
  43. #define HFRMREG_DEFAULT  0
  44. #define HFRMREG_LOCAL    1
  45. #define HFRMREG_PERSONAL 2
  46. #define HFRMREG_FOLDER   3
  47.  
  48. DECLARE_MAPI_INTERFACE_PTR(IPersistMessage, LPPERSISTMESSAGE);
  49. DECLARE_MAPI_INTERFACE_PTR(IMAPIMessageSite, LPMAPIMESSAGESITE);
  50. DECLARE_MAPI_INTERFACE_PTR(IMAPISession, LPMAPISESSION);
  51. DECLARE_MAPI_INTERFACE_PTR(IMAPIViewContext, LPMAPIVIEWCONTEXT);
  52. DECLARE_MAPI_INTERFACE_PTR(IMAPIViewAdviseSink, LPMAPIVIEWADVISESINK);
  53. DECLARE_MAPI_INTERFACE_PTR(IMAPIFormAdviseSink, LPMAPIFORMADVISESINK);
  54. DECLARE_MAPI_INTERFACE_PTR(IMAPIFormInfo, LPMAPIFORMINFO);
  55. DECLARE_MAPI_INTERFACE_PTR(IMAPIFormMgr, LPMAPIFORMMGR);
  56. DECLARE_MAPI_INTERFACE_PTR(IMAPIFormContainer, LPMAPIFORMCONTAINER);
  57. DECLARE_MAPI_INTERFACE_PTR(IMAPIForm, LPMAPIFORM);
  58. DECLARE_MAPI_INTERFACE_PTR(IMAPIFormFactory, LPMAPIFORMFACTORY);
  59.  
  60. typedef const char FAR *FAR * LPPCSTR;
  61. typedef LPMAPIFORMINFO FAR *LPPMAPIFORMINFO;
  62.  
  63. STDAPI MAPIOpenFormMgr(LPMAPISESSION pSession, LPMAPIFORMMGR FAR * ppmgr);
  64. STDAPI MAPIOpenLocalFormContainer(LPMAPIFORMCONTAINER FAR * ppfcnt);
  65.  
  66.  
  67. /*-- GetLastError ----------------------------------------------------------*/
  68. /* This defines the GetLastError method held in common by most mapiform
  69.  * interfaces.  It is defined separately so that an implementor may include
  70.  * more than one mapiform interface in a class.
  71.  */
  72.  
  73. #define MAPI_GETLASTERROR_METHOD(IPURE)                                 \
  74.     MAPIMETHOD(GetLastError) (THIS_                                     \
  75.         /*in*/  HRESULT hResult,                                        \
  76.     /*in*/  ULONG ulFlags,                                          \
  77.         /*out*/ LPMAPIERROR FAR * lppMAPIError) IPURE;                  \
  78.  
  79.  
  80. /*-- IPersistMessage -------------------------------------------------------*/
  81. /* This interface is implemented by forms and is used to save,
  82.  * initialize and load forms to and from messages.
  83.  */
  84.  
  85. #define MAPI_IPERSISTMESSAGE_METHODS(IPURE)                             \
  86.     MAPIMETHOD(GetClassID) (THIS_ LPCLSID lpClassID) IPURE;             \
  87.     MAPIMETHOD(IsDirty)(THIS) IPURE;                                    \
  88.     MAPIMETHOD(InitNew)(THIS_                                           \
  89.         /*in*/ LPMAPIMESSAGESITE pMessageSite,                          \
  90.         /*in*/ LPMESSAGE pMessage) IPURE;                               \
  91.     MAPIMETHOD(Load)(THIS_                                              \
  92.         /*in*/ LPMAPIMESSAGESITE pMessageSite,                          \
  93.         /*in*/ LPMESSAGE pMessage,                                      \
  94.         /*in*/ ULONG ulMessageStatus,                                   \
  95.         /*in*/ ULONG ulMessageFlags) IPURE;                             \
  96.     MAPIMETHOD(Save)(THIS_                                              \
  97.         /*in*/ LPMESSAGE pMessage,                                      \
  98.         /*in*/ ULONG fSameAsLoad) IPURE;                                \
  99.     MAPIMETHOD(SaveCompleted)(THIS_                                     \
  100.         /*in*/ LPMESSAGE pMessage) IPURE;                               \
  101.     MAPIMETHOD(HandsOffMessage)(THIS) IPURE;                            \
  102.  
  103. #undef INTERFACE
  104. #define INTERFACE IPersistMessage
  105. DECLARE_MAPI_INTERFACE_(IPersistMessage, IUnknown)
  106. {
  107.     BEGIN_INTERFACE
  108.     MAPI_IUNKNOWN_METHODS(PURE)
  109.     MAPI_GETLASTERROR_METHOD(PURE)
  110.     MAPI_IPERSISTMESSAGE_METHODS(PURE)
  111. };
  112.  
  113.  
  114. /*-- IMAPIMessageSite ------------------------------------------------------*/
  115.  
  116. #define MAPI_IMAPIMESSAGESITE_METHODS(IPURE)                            \
  117.     MAPIMETHOD(GetSession) (THIS_                                       \
  118.         /*out*/ LPMAPISESSION FAR * ppSession) IPURE;                   \
  119.     MAPIMETHOD(GetStore) (THIS_                                         \
  120.         /*out*/ LPMDB FAR * ppStore) IPURE;                             \
  121.     MAPIMETHOD(GetFolder) (THIS_                                        \
  122.         /*out*/ LPMAPIFOLDER FAR * ppFolder) IPURE;                     \
  123.     MAPIMETHOD(GetMessage) (THIS_                                       \
  124.         /*out*/ LPMESSAGE FAR * ppmsg) IPURE;                           \
  125.     MAPIMETHOD(GetFormManager) (THIS_                                   \
  126.         /*out*/ LPMAPIFORMMGR FAR * ppFormMgr) IPURE;                   \
  127.     MAPIMETHOD(NewMessage) (THIS_                                       \
  128.         /*in*/  ULONG fComposeInFolder,                                 \
  129.         /*in*/  LPMAPIFOLDER pFolderFocus,                              \
  130.         /*in*/  LPPERSISTMESSAGE pPersistMessage,                       \
  131.         /*out*/ LPMESSAGE FAR * ppMessage,                              \
  132.         /*out*/ LPMAPIMESSAGESITE FAR * ppMessageSite,                  \
  133.         /*out*/ LPMAPIVIEWCONTEXT FAR * ppViewContext) IPURE;           \
  134.     MAPIMETHOD(CopyMessage) (THIS_                                      \
  135.         /*in*/  LPMAPIFOLDER pFolderDestination) IPURE;                 \
  136.     MAPIMETHOD(MoveMessage) (THIS_                                      \
  137.         /*in*/  LPMAPIFOLDER pFolderDestination,                        \
  138.         /*in*/  LPMAPIVIEWCONTEXT pViewContext,                         \
  139.         /*in*/  LPCRECT prcPosRect) IPURE;                              \
  140.     MAPIMETHOD(DeleteMessage) (THIS_                                    \
  141.         /*in*/  LPMAPIVIEWCONTEXT pViewContext,                         \
  142.         /*in*/  LPCRECT prcPosRect) IPURE;                              \
  143.     MAPIMETHOD(SaveMessage) (THIS) IPURE;                               \
  144.     MAPIMETHOD(SubmitMessage) (THIS_                                    \
  145.         /*in*/ ULONG ulFlags) IPURE;                                    \
  146.     MAPIMETHOD(GetSiteStatus) (THIS_                                    \
  147.         /*out*/ LPULONG lpulStatus) IPURE;                              \
  148.  
  149. #undef INTERFACE
  150. #define INTERFACE IMAPIMessageSite
  151. DECLARE_MAPI_INTERFACE_(IMAPIMessageSite, IUnknown)
  152. {
  153.     BEGIN_INTERFACE
  154.     MAPI_IUNKNOWN_METHODS(PURE)
  155.     MAPI_GETLASTERROR_METHOD(PURE)
  156.     MAPI_IMAPIMESSAGESITE_METHODS(PURE)
  157. };
  158.  
  159.  
  160. /*-- IMAPIForm -------------------------------------------------------------*/
  161. /* This interface is implemented by forms for the benefit of viewers.
  162.  * One method (ShutdownForm) is provided such that simple forms implementing
  163.  * only IMAPIForm and IPersistMessage have reasonable embedding behavior.
  164.  */
  165.  
  166. #define MAPI_IMAPIFORM_METHODS(IPURE)                                   \
  167.     MAPIMETHOD(SetViewContext) (THIS_                                   \
  168.         /*in*/  LPMAPIVIEWCONTEXT pViewContext) IPURE;                  \
  169.     MAPIMETHOD(GetViewContext) (THIS_                                   \
  170.         /*out*/ LPMAPIVIEWCONTEXT FAR * ppViewContext) IPURE;           \
  171.     MAPIMETHOD(ShutdownForm)(THIS_                                             \
  172.         /*in*/  ULONG ulSaveOptions) IPURE;                             \
  173.     MAPIMETHOD(DoVerb) (THIS_                                           \
  174.         /*in*/  LONG iVerb,                                             \
  175.         /*in*/  LPMAPIVIEWCONTEXT lpViewContext, /* can be null */      \
  176.         /*in*/  ULONG hwndParent,                                       \
  177.         /*in*/  LPCRECT lprcPosRect) IPURE;                             \
  178.     MAPIMETHOD(Advise)(THIS_                                            \
  179.         /*in*/  LPMAPIVIEWADVISESINK pAdvise,                           \
  180.         /*out*/ ULONG FAR * pdwStatus) IPURE;                           \
  181.     MAPIMETHOD(Unadvise) (THIS_                                         \
  182.         /*in*/  ULONG ulConnection) IPURE;                              \
  183.  
  184. #undef INTERFACE
  185. #define INTERFACE IMAPIForm
  186. DECLARE_MAPI_INTERFACE_(IMAPIForm, IUnknown)
  187. {
  188.     BEGIN_INTERFACE
  189.     MAPI_IUNKNOWN_METHODS(PURE)
  190.     MAPI_GETLASTERROR_METHOD(PURE)
  191.     MAPI_IMAPIFORM_METHODS(PURE)
  192. };
  193.  
  194. typedef enum tagSAVEOPTS
  195. {
  196.     SAVEOPTS_SAVEIFDIRTY = 0,
  197.     SAVEOPTS_NOSAVE = 1,
  198.     SAVEOPTS_PROMPTSAVE = 2
  199. } SAVEOPTS;
  200.  
  201.  
  202. /*-- IMAPIViewContext ------------------------------------------------------*/
  203. /* Implemented by viewers to support next/previous in forms.
  204.  */
  205.  
  206. /* Structure passed in GetPrintSetup  */
  207.  
  208. typedef struct {
  209.     ULONG ulFlags;  /* MAPI_UNICODE */
  210.     HGLOBAL hDevMode;
  211.     HGLOBAL hDevNames;
  212.     ULONG ulFirstPageNumber;
  213.     ULONG fPrintAttachments;
  214. } FORMPRINTSETUP, FAR * LPFORMPRINTSETUP;
  215.  
  216. /* Values for pulFormat in GetSaveStream */
  217.  
  218. #define SAVE_FORMAT_TEXT                1
  219. #define SAVE_FORMAT_RICHTEXT            2
  220.  
  221. /* Values from 0 to 0x3fff are reserved for future definition by Microsoft */
  222.  
  223. #define MAPI_IMAPIVIEWCONTEXT_METHODS(IPURE)                            \
  224.     MAPIMETHOD(SetAdviseSink)(THIS_                                     \
  225.         /*in*/  LPMAPIFORMADVISESINK pmvns) IPURE;                      \
  226.     MAPIMETHOD(ActivateNext)(THIS_                                      \
  227.         /*in*/  ULONG ulDir,                                            \
  228.         /*in*/  LPCRECT prcPosRect) IPURE;                              \
  229.     MAPIMETHOD(GetPrintSetup)(THIS_                                     \
  230.         /*in*/  ULONG ulFlags,                                          \
  231.         /*out*/ LPFORMPRINTSETUP FAR * lppFormPrintSetup) IPURE;        \
  232.     MAPIMETHOD(GetSaveStream)(THIS_                                     \
  233.         /*out*/ ULONG FAR * pulFlags,                                   \
  234.         /*out*/ ULONG FAR * pulFormat,                                  \
  235.         /*out*/ LPSTREAM FAR * ppstm) IPURE;                            \
  236.     MAPIMETHOD(GetViewStatus) (THIS_                                    \
  237.         /*out*/ LPULONG lpulStatus) IPURE;                              \
  238.  
  239. #undef INTERFACE
  240. #define INTERFACE IMAPIViewContext
  241. DECLARE_MAPI_INTERFACE_(IMAPIViewContext, IUnknown)
  242. {
  243.     BEGIN_INTERFACE
  244.     MAPI_IUNKNOWN_METHODS(PURE)
  245.     MAPI_GETLASTERROR_METHOD(PURE)
  246.     MAPI_IMAPIVIEWCONTEXT_METHODS(PURE)
  247. };
  248.  
  249. #define VCSTATUS_NEXT                           0x00000001
  250. #define VCSTATUS_PREV                           0x00000002
  251. #define VCSTATUS_MODAL                          0x00000004
  252. #define VCSTATUS_INTERACTIVE                    0x00000008
  253. #define VCSTATUS_READONLY                       0x00000010
  254. #define VCSTATUS_DELETE                         0x00010000
  255. #define VCSTATUS_COPY                           0x00020000
  256. #define VCSTATUS_MOVE                           0x00040000
  257. #define VCSTATUS_SUBMIT                         0x00080000
  258. #define VCSTATUS_DELETE_IS_MOVE                 0x00100000
  259. #define VCSTATUS_SAVE                           0x00200000
  260. #define VCSTATUS_NEW_MESSAGE                    0x00400000
  261.  
  262. #define VCDIR_NEXT                              VCSTATUS_NEXT
  263. #define VCDIR_PREV                              VCSTATUS_PREV
  264. #define VCDIR_DELETE                            VCSTATUS_DELETE
  265. #define VCDIR_MOVE                              VCSTATUS_MOVE
  266.  
  267.  
  268. /*-- IMAPIFormAdviseSink ---------------------------------------------------*/
  269. /* Part of form server, held by view; receives notifications from the view.
  270.  *
  271.  * This part of the form server, but is not an interface on the form
  272.  * object.  This means that clients should not expect to QueryInterface
  273.  * from an IMAPIForm* or IOleObject* to this interface, or vice versa.
  274.  */
  275.  
  276. #define MAPI_IMAPIFORMADVISESINK_METHODS(IPURE)                         \
  277.     STDMETHOD(OnChange)(THIS_ ULONG ulDir) IPURE;                       \
  278.     STDMETHOD(OnActivateNext)(THIS_                                     \
  279.         /*in*/  LPCSTR lpszMessageClass,                                \
  280.         /*in*/  ULONG ulMessageStatus,                                  \
  281.         /*in*/  ULONG ulMessageFlags,                                   \
  282.         /*out*/ LPPERSISTMESSAGE FAR * ppPersistMessage) IPURE;         \
  283.  
  284. #undef INTERFACE
  285. #define INTERFACE IMAPIFormAdviseSink
  286. DECLARE_MAPI_INTERFACE_(IMAPIFormAdviseSink, IUnknown)
  287. {
  288.     BEGIN_INTERFACE
  289.     MAPI_IUNKNOWN_METHODS(PURE)
  290.     MAPI_IMAPIFORMADVISESINK_METHODS(PURE)
  291. };
  292.  
  293.  
  294. /*-- IMAPIViewAdviseSink ---------------------------------------------------*/
  295. /* Part of view context, held by form; receives notifications from the form.
  296.  */
  297.  
  298. #define MAPI_IMAPIVIEWADVISESINK_METHODS(IPURE)                         \
  299.     MAPIMETHOD(OnShutdown)(THIS) IPURE;                                    \
  300.     MAPIMETHOD(OnNewMessage)(THIS) IPURE;                               \
  301.     MAPIMETHOD(OnPrint)(THIS_                                           \
  302.         /*in*/ ULONG dwPageNumber,                                      \
  303.         /*in*/ HRESULT hrStatus) IPURE;                                 \
  304.     MAPIMETHOD(OnSubmitted) (THIS) IPURE;                               \
  305.     MAPIMETHOD(OnSaved) (THIS) IPURE;                                   \
  306.  
  307. #undef INTERFACE
  308. #define INTERFACE IMAPIViewAdviseSink
  309. DECLARE_MAPI_INTERFACE_(IMAPIViewAdviseSink, IUnknown)
  310. {
  311.     BEGIN_INTERFACE
  312.     MAPI_IUNKNOWN_METHODS(PURE)
  313.     MAPI_IMAPIVIEWADVISESINK_METHODS(PURE)
  314. };
  315.  
  316.  
  317. /*-- IMAPIFormInfo ---------------------------------------------------------*/
  318. /* Is implemented by registries.  Describes the form.
  319.  */
  320.  
  321. /* Single enum value */
  322.  
  323. typedef struct
  324. {                               /* fpev */
  325.     LPTSTR pszDisplayName;      /* carries the display string */
  326.     ULONG nVal;                 /* the value for the above enumeration */
  327. } SMAPIFormPropEnumVal, FAR * LPMAPIFORMPROPENUMVAL;
  328.  
  329. /* MAPI Form property descriptor */
  330.  
  331. /*
  332.  * Values for the tag in the SMAPIFormProp structure
  333.  *
  334.  * Microsoft reserves the range from 0 to 0x3FFF for future use in its other
  335.  * forms registry implementations.
  336.  */
  337.  
  338. typedef ULONG FORMPROPSPECIALTYPE;
  339.  
  340. #define FPST_VANILLA                    0
  341. #define FPST_ENUM_PROP                  1
  342.  
  343. typedef struct
  344. {
  345.     ULONG ulFlags;              /* Contains MAPI_UNICODE if strings are UNICODE */
  346.     ULONG nPropType;            /* type of the property, hiword is 0 */
  347.     MAPINAMEID nmid;            /* id of the property */
  348.     LPTSTR pszDisplayName;
  349.     FORMPROPSPECIALTYPE nSpecialType;   /* tag for the following union */
  350.     union
  351.     {
  352.         struct
  353.         {
  354.             MAPINAMEID nmidIdx;
  355.             ULONG cfpevAvailable;   /* # of enums */
  356.             LPMAPIFORMPROPENUMVAL pfpevAvailable;
  357.         } s1;                   /* Property String/Number association Enumeration */
  358.     } u;
  359. } SMAPIFormProp, FAR * LPMAPIFORMPROP;
  360.  
  361. /* Array of form properties */
  362.  
  363. typedef struct
  364. {
  365.     ULONG cProps;
  366.     ULONG ulPad;                /* Pad to 8-byte alignment for insurance */
  367.     SMAPIFormProp aFormProp[MAPI_DIM];
  368. } SMAPIFormPropArray, FAR * LPMAPIFORMPROPARRAY;
  369.  
  370. #define CbMAPIFormPropArray(_c) \
  371.          (offsetof(SMAPIFormPropArray, aFormProp) + \
  372.          (_c)*sizeof(SMAPIFormProp))
  373.  
  374. /* Structure defining the layout of an mapi verb description */
  375.  
  376. typedef struct
  377. {
  378.     LONG lVerb;
  379.     LPTSTR szVerbname;
  380.     DWORD fuFlags;
  381.     DWORD grfAttribs;
  382.     ULONG ulFlags;              /* Either 0 or MAPI_UNICODE */
  383. } SMAPIVerb, FAR * LPMAPIVERB;
  384.  
  385. /* Structure used for returning arrays of mapi verbs */
  386.  
  387. typedef struct
  388. {
  389.     ULONG cMAPIVerb;            /* Number of verbs in the structure */
  390.     SMAPIVerb aMAPIVerb[MAPI_DIM];
  391. } SMAPIVerbArray, FAR * LPMAPIVERBARRAY;
  392.  
  393. #define CbMAPIVerbArray(_c) \
  394.          (offsetof(SMAPIVerbArray, aMAPIVerb) + \
  395.          (_c)*sizeof(SMAPIVerb))
  396.  
  397. #define MAPI_IMAPIFORMINFO_METHODS(IPURE)                               \
  398.     MAPIMETHOD(CalcFormPropSet)(THIS_                                   \
  399.         /*in*/  ULONG ulFlags,                                          \
  400.         /*out*/ LPMAPIFORMPROPARRAY FAR * ppFormPropArray) IPURE;       \
  401.     MAPIMETHOD(CalcVerbSet)(THIS_                                       \
  402.         /*in*/  ULONG ulFlags,                                          \
  403.         /*out*/ LPMAPIVERBARRAY FAR * ppMAPIVerbArray) IPURE;           \
  404.     MAPIMETHOD(MakeIconFromBinary)(THIS_                                \
  405.         /*in*/ ULONG nPropID,                                           \
  406.         /*out*/ HICON FAR* phicon) IPURE;                               \
  407.     MAPIMETHOD(SaveForm)(THIS_                                          \
  408.         /*in*/ LPCTSTR szFileName) IPURE;                               \
  409.     MAPIMETHOD(OpenFormContainer)(THIS_                                 \
  410.         /*out*/ LPMAPIFORMCONTAINER FAR * ppformcontainer) IPURE;       \
  411.  
  412. #undef INTERFACE
  413. #define INTERFACE IMAPIFormInfo
  414. DECLARE_MAPI_INTERFACE_(IMAPIFormInfo, IMAPIProp)
  415. {
  416.     BEGIN_INTERFACE
  417.     MAPI_IUNKNOWN_METHODS(PURE)
  418.     MAPI_IMAPIPROP_METHODS(PURE)    /* note: subsumes getlasterror */
  419.     MAPI_IMAPIFORMINFO_METHODS(PURE)
  420. };
  421.  
  422.  
  423. /* Enumeration of permissible values for PR_FORM_MESSAGE_BEHAVIOR */
  424.  
  425. #define MAPI_MESSAGE_BEHAVIOR_IPM 0
  426. #define MAPI_MESSAGE_BEHAVIOR_FOLDER 1
  427.  
  428.  
  429. /*-- IMAPIFormMgr ----------------------------------------------------------*/
  430. /* The client-visible interface for form resolution and dispatch.
  431.  */
  432.  
  433. /* Structure containing an array of message class strings */
  434.  
  435. typedef struct
  436. {
  437.     ULONG cValues;
  438.     LPCSTR aMessageClass[MAPI_DIM];
  439. } SMessageClassArray, FAR * LPSMESSAGECLASSARRAY;
  440.  
  441. #define CbMessageClassArray(_c) \
  442.         (offsetof(SMessageClassArray, aMessageClass) + (_c)*sizeof(LPCSTR))
  443.  
  444. /* Structure containing an array of IMAPIFormInfo interfaces */
  445.  
  446. typedef struct
  447. {
  448.     ULONG cForms;
  449.     LPMAPIFORMINFO aFormInfo[MAPI_DIM];
  450. } SMAPIFormInfoArray, FAR * LPSMAPIFORMINFOARRAY;
  451.  
  452. #define CbMAPIFormInfoArray(_c) \
  453.          (offsetof(SMAPIFormInfoArray, aFormInfo) + \
  454.          (_c)*sizeof(LPMAPIFORMINFO))
  455.  
  456. /* Flags for IMAPIFormMgr::SelectFormContainer */
  457.  
  458. #define MAPIFORM_SELECT_ALL_REGISTRIES           0
  459. #define MAPIFORM_SELECT_FOLDER_REGISTRY_ONLY     1
  460. #define MAPIFORM_SELECT_NON_FOLDER_REGISTRY_ONLY 2
  461.  
  462. /* Flags for IMAPIFormMgr::CalcFormPropSet */
  463.  
  464. #define FORMPROPSET_UNION                 0
  465. #define FORMPROPSET_INTERSECTION          1
  466.  
  467. /* Flags for IMAPIFormMgr::ResolveMessageClass and
  468.    IMAPIFormMgr::ResolveMultipleMessageClasses */
  469.  
  470. #define MAPIFORM_EXACTMATCH             0x0020
  471.  
  472. #define MAPI_IMAPIFORMMGR_METHODS(IPURE)                                \
  473.     MAPIMETHOD(LoadForm)(THIS_                                          \
  474.         /*in*/  ULONG ulUIParam,                                        \
  475.         /*in*/  ULONG ulFlags,                                          \
  476.         /*in*/  LPCSTR lpszMessageClass,                                \
  477.         /*in*/  ULONG ulMessageStatus,                                  \
  478.         /*in*/  ULONG ulMessageFlags,                                   \
  479.         /*in*/  LPMAPIFOLDER pFolderFocus,                              \
  480.         /*in*/  LPMAPIMESSAGESITE pMessageSite,                         \
  481.         /*in*/  LPMESSAGE pmsg,                                         \
  482.         /*in*/  LPMAPIVIEWCONTEXT pViewContext,                         \
  483.         /*in*/  REFIID riid,                                            \
  484.         /*out*/ LPVOID FAR *ppvObj) IPURE;                              \
  485.     MAPIMETHOD(ResolveMessageClass)(THIS_                               \
  486.         /*in*/  LPCSTR szMsgClass,                                      \
  487.         /*in*/  ULONG ulFlags,                                          \
  488.         /*in*/  LPMAPIFOLDER pFolderFocus, /* can be null */            \
  489.         /*out*/ LPMAPIFORMINFO FAR* ppResult) IPURE;                    \
  490.     MAPIMETHOD(ResolveMultipleMessageClasses)(THIS_                     \
  491.         /*in*/  LPSMESSAGECLASSARRAY pMsgClasses,                       \
  492.         /*in*/  ULONG ulFlags,                                          \
  493.         /*in*/  LPMAPIFOLDER pFolderFocus, /* can be null */            \
  494.         /*out*/ LPSMAPIFORMINFOARRAY FAR * pfrminfoarray) IPURE;        \
  495.     MAPIMETHOD(CalcFormPropSet)(THIS_                                   \
  496.         /*in*/  LPSMAPIFORMINFOARRAY pfrminfoarray,                     \
  497.         /*in*/  ULONG ulFlags,                                          \
  498.         /*out*/ LPMAPIFORMPROPARRAY FAR* ppResults) IPURE;              \
  499.     MAPIMETHOD(CreateForm)(THIS_                                        \
  500.         /*in*/  ULONG ulUIParam,                                        \
  501.         /*in*/  ULONG ulFlags,                                          \
  502.         /*in*/  LPMAPIFORMINFO pfrminfoToActivate,                      \
  503.         /*in*/  REFIID refiidToAsk,                                     \
  504.         /*out*/ LPVOID FAR* ppvObj) IPURE;                              \
  505.     MAPIMETHOD(SelectForm)(THIS_                                        \
  506.         /*in*/  ULONG ulUIParam,                                        \
  507.         /*in*/  ULONG ulFlags,                                          \
  508.         /*in*/  LPCTSTR pszTitle,                                       \
  509.         /*in*/  LPMAPIFOLDER pfld,                                      \
  510.         /*out*/ LPMAPIFORMINFO FAR * ppfrminfoReturned) IPURE;          \
  511.     MAPIMETHOD(SelectMultipleForms)(THIS_                               \
  512.         /*in*/  ULONG ulUIParam,                                        \
  513.         /*in*/  ULONG ulFlags,                                          \
  514.         /*in*/  LPCTSTR pszTitle,                                       \
  515.         /*in*/  LPMAPIFOLDER pfld,                                      \
  516.         /*in*/  LPSMAPIFORMINFOARRAY pfrminfoarray,                     \
  517.         /*out*/ LPSMAPIFORMINFOARRAY FAR * ppfrminfoarray) IPURE;       \
  518.     MAPIMETHOD(SelectFormContainer)(THIS_                               \
  519.         /*in*/  ULONG ulUIParam,                                        \
  520.         /*in*/  ULONG ulFlags,                                          \
  521.         /*out*/ LPMAPIFORMCONTAINER FAR * lppfcnt) IPURE;               \
  522.     MAPIMETHOD(OpenFormContainer)(THIS_                                 \
  523.         /*in*/  HFRMREG hfrmreg,                                        \
  524.         /*in*/  LPUNKNOWN lpunk,                                        \
  525.         /*out*/ LPMAPIFORMCONTAINER FAR * lppfcnt) IPURE;               \
  526.     MAPIMETHOD(PrepareForm)(THIS_                                       \
  527.         /*in*/  ULONG ulUIParam,                                        \
  528.         /*in*/  ULONG ulFlags,                                          \
  529.         /*in*/  LPMAPIFORMINFO pfrminfo) IPURE;                         \
  530.     MAPIMETHOD(IsInConflict)(THIS_                                      \
  531.         /*in*/  ULONG ulMessageFlags,                                   \
  532.         /*in*/  ULONG ulMessageStatus,                                  \
  533.         /*in*/  LPCSTR szMessageClass,                                  \
  534.         /*in*/  LPMAPIFOLDER pFolderFocus) IPURE;                       \
  535.  
  536. #undef         INTERFACE
  537. #define         INTERFACE    IMAPIFormMgr
  538. DECLARE_MAPI_INTERFACE_(IMAPIFormMgr, IUnknown)
  539. {
  540.     BEGIN_INTERFACE
  541.     MAPI_IUNKNOWN_METHODS(PURE)
  542.     MAPI_GETLASTERROR_METHOD(PURE)
  543.     MAPI_IMAPIFORMMGR_METHODS(PURE)
  544. };
  545.  
  546. /* Platform numbers (used in .CFG files for forms) */
  547.  
  548. #define MAPIFORM_CPU_X86                1
  549. #define MAPIFORM_CPU_MIP                2
  550. #define MAPIFORM_CPU_AXP                3
  551. #define MAPIFORM_CPU_PPC                4
  552. #define MAPIFORM_CPU_M68                5
  553.  
  554. #define MAPIFORM_OS_WIN_31              1
  555. #define MAPIFORM_OS_WINNT_35            2
  556. #define MAPIFORM_OS_WIN_95              3
  557. #define MAPIFORM_OS_MAC_7x              4
  558. #define MAPIFORM_OS_WINNT_40            5
  559.  
  560. #define MAPIFORM_PLATFORM(CPU, OS) ((ULONG) ((((ULONG) CPU) << 16) | OS))
  561.  
  562.  
  563. /*-- IMAPIFormContainer -------------------------------------------------*/
  564.  
  565. /*  Flags for IMAPIFormMgr::CalcFormPropSet */
  566.  
  567. /* #define FORMPROPSET_UNION            0   */
  568. /* #define FORMPROPSET_INTERSECTION     1   */
  569.  
  570. /*  Flags for IMAPIFormMgr::InstallForm     */
  571.  
  572. #define MAPIFORM_INSTALL_DIALOG                 MAPI_DIALOG
  573. #define MAPIFORM_INSTALL_OVERWRITEONCONFLICT    0x0010
  574.  
  575. /*  Flags for IMAPIFormContainer::ResolveMessageClass and
  576.     IMAPIFormContainer::ResolveMultipleMessageClasses */
  577. /* #define MAPIFORM_EXACTIMATCH    0x0020   */
  578.  
  579. #define MAPI_IMAPIFORMCONTAINER_METHODS(IPURE)                       \
  580.     MAPIMETHOD(InstallForm)(THIS_                                   \
  581.         /*in*/  ULONG ulUIParam,                                        \
  582.         /*in*/  ULONG ulFlags,                                          \
  583.         /*in*/  LPCTSTR szCfgPathName) IPURE;                           \
  584.     MAPIMETHOD(RemoveForm)(THIS_                                        \
  585.         /*in*/  LPCSTR szMessageClass) IPURE;                           \
  586.     MAPIMETHOD(ResolveMessageClass) (THIS_                              \
  587.         /*in*/  LPCSTR szMessageClass,                                  \
  588.         /*in*/  ULONG ulFlags,                                          \
  589.         /*out*/ LPMAPIFORMINFO FAR * pforminfo) IPURE;                  \
  590.     MAPIMETHOD(ResolveMultipleMessageClasses) (THIS_                    \
  591.         /*in*/  LPSMESSAGECLASSARRAY pMsgClassArray,                    \
  592.         /*in*/  ULONG ulFlags,                                          \
  593.         /*out*/ LPSMAPIFORMINFOARRAY FAR * ppfrminfoarray) IPURE;       \
  594.     MAPIMETHOD(CalcFormPropSet)(THIS_                                   \
  595.         /*in*/  ULONG ulFlags,                                          \
  596.         /*out*/ LPMAPIFORMPROPARRAY FAR * ppResults) IPURE;             \
  597.     MAPIMETHOD(GetDisplay)(THIS_                                        \
  598.         /*in*/  ULONG ulFlags,                                          \
  599.         /*out*/ LPTSTR FAR * pszDisplayName) IPURE;                     \
  600.  
  601. #undef INTERFACE
  602. #define INTERFACE IMAPIFormContainer
  603. DECLARE_MAPI_INTERFACE_(IMAPIFormContainer, IUnknown)
  604. {
  605.     BEGIN_INTERFACE
  606.     MAPI_IUNKNOWN_METHODS(PURE)
  607.     MAPI_GETLASTERROR_METHOD(PURE)
  608.     MAPI_IMAPIFORMCONTAINER_METHODS(PURE)
  609. };
  610.  
  611. /*-- IMAPIFormFactory ------------------------------------------------------*/
  612.  
  613. #define MAPI_IMAPIFORMFACTORY_METHODS(IPURE)                            \
  614.     MAPIMETHOD(CreateClassFactory) (THIS_                               \
  615.         /*in*/  REFCLSID clsidForm,                                     \
  616.         /*in*/  ULONG ulFlags,                                          \
  617.         /*out*/ LPCLASSFACTORY FAR * lppClassFactory) IPURE;            \
  618.     MAPIMETHOD(LockServer) (THIS_                                       \
  619.         /*in*/  ULONG ulFlags,                                          \
  620.         /*in*/  ULONG fLockServer) IPURE;                               \
  621.  
  622. #undef INTERFACE
  623. #define INTERFACE IMAPIFormFactory
  624. DECLARE_MAPI_INTERFACE_(IMAPIFormFactory, IUnknown)
  625. {
  626.     BEGIN_INTERFACE
  627.     MAPI_IUNKNOWN_METHODS(PURE)
  628.     MAPI_GETLASTERROR_METHOD(PURE)
  629.     MAPI_IMAPIFORMFACTORY_METHODS(PURE)
  630. };
  631.  
  632. #if defined (__BORLANDC__)
  633. #  include <poppack.h>
  634. #endif
  635.  
  636. #pragma option pop
  637. #endif                          /* MAPIFORM_H */
  638.